#!/usr/bin/env python 
# -*- coding: utf-8 -*-
# @Time    : 2022/9/14 16:12
# @Author  : Junzhao
# @File    : 房贷计算器.py
# @Software: PyCharm

"""
公式：
每月月供参考 = 贷款金额 * (月利率 * (1 + 月利率) ** 还款月数) / (((1 + 月利率) ** 还款月数) - 1)
还款总额 = 每月月供参考 * 期限 * 12
支付利息 = 还款总额 - 贷款金额 * 10000

以上计算方式中月利率 (月利率 = 利率 / 12) 指以月为计息周期计算的利息
。不同贷款类型的利率是不同的:
对于商业贷款而言，五年以下(含五年)的贷款利率是4.75%，五年以上的贷款利率是4.90%;
对于公积金贷款利率而言，五年以下(含五年)的贷款利率是2.75%， 五年以上的利率是3.25%。
"""
flag = ""


def selectMenu():
    """选择计算模式"""
    return int(input("请选择计算模式：\n\t1.商业贷款 2.公积金贷款 3.组合贷款 （输入数字1 2 3）\n"))


def info(loan_amount, loan_time, interest):
    """通过公式计算各项并打印到控制台"""
    month_interest = interest / 12
    # 月供参考
    month_reference = loan_amount * (month_interest * (1 + month_interest) ** (loan_time * 12)) \
                      / ((1 + month_interest) ** (loan_time * 12) - 1)
    # 还款总额
    total = month_reference * loan_time * 12
    # 支付利息
    pay_interest = total - loan_amount
    print("您的每月月供参考为%.4f 万元" % month_reference)
    print("您需还款总额为%.4f 万元" % total)
    print("您需支付利息总计%.4f 万元" % pay_interest)


def business():
    """商业计算"""
    loan_amount = float(input("输入您的贷款金额（单位：万元）"))
    loan_time = float(input("输入您的贷款期限（单位：年）"))
    if 0 < loan_time <= 5:
        interest = 0.0475
    else:
        interest = 0.049
    info(loan_amount, loan_time, interest)


def accumulation_fund():
    """公积金计算"""
    loan_amount = float(input("输入您的贷款金额（单位：万元）"))
    loan_time = float(input("输入您的贷款期限（单位：年）"))
    if 0 < loan_time <= 5:
        interest = 0.0275
    else:
        interest = 0.0325
    info(loan_amount, loan_time, interest)


def combination():
    """组合计算"""
    print("请输入商业贷款信息")
    business()
    print("请输入公积金贷款信息")
    accumulation_fund()


while flag != "esc":
    print("贷款计算器 v1.01")
    sm = selectMenu()
    if sm == 1:
        print("商业贷款模式")
        business()
    elif sm == 2:
        print("公积金贷款模式")
        accumulation_fund()
    elif sm == 3:
        print("组合贷款模式")
        combination()
    else:
        print("请检查您的输入！")

    flag = input("是否继续使用？（esc退出/任意键继续）")
